前面 Day 19 提到幾個我自己規劃的學習階段,在前面幾天的階段一中研究了 Rspack、Oxc、SWC 等 Rust-based 開發工具各種驚人的效能後,差不多也該進入階段二來學習寫個 Rust 版本的 Hello, world
了!
正如龍哥在這篇說的軟體改版時安裝方式可能會有變動,因此最好的依據還是參考官方文件安裝適合自己系統的方式。而這邊紀錄我用的 Macbook M1 系統現主時的安裝方式,如果與我雷同的也可以參考看看。
官方文件中建議使用 rustup 這個工具來安裝,可以理解像是 Node.js 中的 NVM 一樣,可以拿來安裝、升級、切換 Rust 版本:
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
一路按 enter 用預設版本安裝,裝完後會看到這樣的訊息:
Rust is installed now. Great!
To get started you may need to restart your current shell.
This would reload your PATH environment variable to include
Cargo's bin directory ($HOME/.cargo/bin).
To configure your current shell, you need to source
the corresponding env file under $HOME/.cargo.
This is usually done by running one of the following (note the leading DOT):
. "$HOME/.cargo/env" # For sh/bash/zsh/ash/dash/pdksh
source "$HOME/.cargo/env.fish" # For fish
意思是如果你要在當前的 shell 中直接執行剛安裝的 Rust compiler 會需要這樣做,因為我用的是 zsh
所以執行這行:
$ . "$HOME/.cargo/env"
執行後就可以來測試看看有沒有安裝成功:
$ rustc --version
rustc 1.81.0 (eeb90cda1 2024-09-04)
有看到版本資訊就是成功了,如果之前裝過想更新到最新版本的話可以用:
$ rustup update
解除安裝 Rust 與 rustup 的話可以用這個指令:
$ rustup self uninstall
想確認目前環境中有安裝的 rustup 版本可以這樣下:
$ rustup toolchain list
其他安裝、移除特定版本就不一一列出,可以參考這個 cheatsheet。
找個適合的地方建一個資料夾,並用 VS Code 開啟 (或要手動建立也可以):
$ mkdir hello-rust
$ cd hello-rust
$ touch main.rs
$ code .
在這個 main.rs
中就可以寫上這段:
fn main() {
println!("Hello, world!");
}
這裡有幾個重點:
fn
是 Rust 中宣告函式的方式main
是 Rust 中的保留字,代表一個 Rust 程式的進入點println!
就類似 JavaScript 中的 console.log
!
是 Rust 中一個稱為巨集 (macro) 的觀念,與一般 function 的其中一個差異在於 macro 可以接收變動數量的參數,像是 println!("hello {}", name)
這種格式化寫法,應該是可以理解 macro 像是比較萬能的 function 吧🍿 說到 Tabs vs Spaces 就不得不回味一下 Silicon Valley 中的經典橋段:
看完了語法解析後接著要怎麼執行這個程式呢?前面在介紹各種 Rust 工具時不斷提到 Rust 是一款編譯型語言,因此在實際執行前,會像 C 語言一樣,需要用編譯器編譯出執行檔:
$ rustc main.rs
執行後會輸出一個 main
的同檔名 binary 執行檔,此時如果執行 ./main
就會印出訊息:
$ ./main
Hello, world!
有別於動態語言的 JavaScript 與 Python 可以直接用 runtime 執行,編譯型語言會需要編譯後才能執行,也因此你能提前在執行程式前就在編譯階段中確認是否有潛在的錯誤。
為了瞭解 Rust 生態系,就不得不來學學 Rust 語言本身,今天回頭從最基礎的 Hello, world
開始學起,也記錄從安裝到執行過程的筆記,明天將會來繼續了解 Rust 的套件管理工具 Cargo,我們明天見!